/**
 * @description 观察者模式通用mixin
 * @param {*}
 * @return {*}
 */
export const mixinObserver = {
  data() {
    return {
      // 观察者对象
      observer: null
    };
  },

  /**
   * 视图初始化时计算布局
   *
   */
  mounted() {
    this.adjustLayout && this.adjustLayout();
  },

  /**
   * @description 销毁视图时结束观测
   */
  beforeDestroy() {
    this.endObserver();
  },

  methods: {
    /**
      * @description 开始观测
      * @param {Object} element 被观察的元素
      */
    startObserver(element) {
      if (element) {
        const objResizeObserver = new ResizeObserver(() => {
          // console.log("objResizeObserver");
          // 计算布局
          this.adjustLayout && this.adjustLayout();
          // 结束观测
          this.endObserver();
        });
        // 观察元素
        objResizeObserver.observe(element);
        this.observer = objResizeObserver;
      }
    },
    /**
     * @description 结束观测
     *
     */
    endObserver() {
      if (this.observer) {
        this.observer.disconnect();
        this.observer = null;
      }
    }
  }
}